package com.基础疑难点;

import java.math.BigDecimal;
import java.util.Objects;
/*
正确使用equals方法
 */
public class UseEquals {

    public static void main(String[] args) {
        String name = null;
        if (Objects.equals(null,"li")) {
            System.out.println("li");
        }

        if ("li".equals(name)){
            System.out.println("li");
        }
//        if (name.equals("li")){
//            System.out.println("li");
//        }else {
//            System.out.println("null");
//        }

        //整型包装类值的比较
        Integer i1 = 40; //这一行代码会发生装箱，也就是说这行代码等价于 Integer i1 = Integer.valueof(40)
        i1=Integer.valueOf(40);
        Integer i2 = new Integer(40);
        System.out.println(i1==i2);
        System.out.println(i1.equals(i2));//所有整型包装类对象之间值的比较，全部使用 equals() 方法比较。
        System.out.println(i2.equals(i1));//所有整型包装类对象之间值的比较，全部使用 equals() 方法比较。

        System.out.println("浮点数之间的等值判断，基本数据类型不能用==来比较，包装数据类型不能用 equals 来判断");
        float a = 1.0f - 0.9f;
        float b = 0.9f - 0.8f;
        float c = 0.8f - 0.7f;
        float d = 0.7f - 0.6f;

        System.out.println(a);// 0.100000024
        System.out.println(b);// 0.099999964
        System.out.println(c);// 0.099999964
        System.out.println(d);// 0.099999964
        System.out.println(a == b);// false


        System.out.println("使用 BigDecimal 来定义浮点数的值，再进行浮点数的运算操作。");
        BigDecimal a1 = new BigDecimal("1.0");
        BigDecimal b1 = new BigDecimal("0.9");
        BigDecimal c1 = new BigDecimal("0.8");
        System.out.println(a1+"-->"+b1+"-->"+c1);
        BigDecimal x = a1.subtract(b1);
        BigDecimal y = b1.subtract(c1);
        System.out.println(x); /* 0.1 */
        System.out.println(y); /* 0.1 */
        System.out.println(Objects.equals(x, y)); /* true */



        BigDecimal m = new BigDecimal("1.255433");
        BigDecimal n = m.setScale(3,BigDecimal.ROUND_HALF_DOWN);
        System.out.println(n);// 1.255

    }
}
